Hauptseite Zu yanwittmann.de

Zur Hauptseite

    3. Register / Ports    

Hardware >> Microcontroller



Register

Register in Prozessoren sind Speicherbereiche für binäre Daten, auf die Prozessoren besonders schnell zugreifen können. Sie befinden sich darum in der direkten Nähe der Rechenwerke (CPU, ...).

Es gibt unterschiedliche Register, die alle für andere Dinge zuständig sind. Es folgt eine Auflistung der für uns relevanten:

                                                                                                                                                                                            
RegisterBitsErklärung
MCUCRISC00 ISC01
ISC10 ISC11
Mit diesen vier Bits kann für die beiden externen Interrupts eingestellt werden, auf was diese reagieren sollen. Genaueres siehe externe Interrupts weiter unten.
GIFRINTF0 INTF1Diese Bits werden gesetzt, wenn im MCUCR ein Interrupt registriert wird.
GIMSKINT0 INT1In diesem Register werden die externen Interrupts aktiviert.
SREGI Z C …Das Statusregister hat acht verschiedene Bits, die jeweils unterschiedliche Funktionen erfüllen. Das I-Bit aktiviert Interrupts allgemein, wenn es gesetzt ist. Das Z-Bit wird gesetzt, wenn die letzte Operation eine 0 als Ergebnis hatte. Das C-Bit wird gesetzt, wenn die letzte Operation einen Rest verursacht hat.
TIMSK0OCIE0 TOIE0Hiermit wird eingestellt, auf was der Timer 0 reagieren soll (output compare / overflow).
TCCR0CS00 - CS01Hiermit wird der Vorteiler des Timer 0 angegeben und somit der Interrupt aktiviert.
r0-15Diese Register sind frei verwendbar, auch, wenn sie nicht durch ‘immediate’-Befehle veränderbar sind.
r16-31Hier sind ‘immediate’-Befehle verwendbar. Diese können zudem als 16-Bit Register verwendet werden, indem immer Paare (also r16 und r17, …) beschrieben werden.


Ports

Es gibt bei dem Microcontroller, den wir verwenden, 4 Ports (A/B/C/D). Für jeden Port gibt es zwei Register, die relevant sind:

                       
DDRA/B/C/D     Data direction register. Es beschreibt, in diesem Fall für Port B, welche der Pins Daten ausgeben sollen und welche zur Eingabe dienen werden. (1 = Ausgabe, 0 = Eingabe)   
PORTA/B/C/DWenn mittels DDRB für die Pins Input eingestellt wurde, werden die Bits den Eingaben der Pins gesetzt und man kann im Programm diese Eingaben verwenden. Wenn ‘Ausgabe’ eingestellt ist, können diese Bits gesetzt werden, um an den Port-Pins auszugeben.

Um also zu bestimmen, welche der 8 Pins Ein- oder Ausgabe sein sollen, muss zunächst eine Bitmaske (z.B. DDRA = 00110100) auf das data direction register des jeweiligen Ports gesetzt werden.
Dann kann man mittels PORTA/B/C/D die Pin-Werte auslesen oder setzen, je nachdem, was man in DDRA/B/C/D festgelegt hat.
Einige dieser Pins werden vom Mikrocontroller bereits für andere Dinge verwendet, wie z.B. als Eingabe für die externen Interrupts. Darum können nicht alle Pins verwendet werden. Welche genau das sind steht in der lokalen Formelsammlung.